<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-alpha.65">
<title data-react-helmet="true">9.4 仓储模式 | Fur</title><meta data-react-helmet="true" name="docsearch:version" content="current,latest"><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" property="og:title" content="9.4 仓储模式 | Fur"><meta data-react-helmet="true" name="description" content="9.4.1 什么是仓储"><meta data-react-helmet="true" property="og:description" content="9.4.1 什么是仓储"><meta data-react-helmet="true" property="og:url" content="https://furos.cn/docs/dbcontext-repository"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://furos.cn/docs/dbcontext-repository"><link rel="stylesheet" href="/styles.8aef5b7b.css">
<link rel="preload" href="/styles.8352e18a.js" as="script">
<link rel="preload" href="/runtime~main.98e14d7d.js" as="script">
<link rel="preload" href="/main.04e1b7d6.js" as="script">
<link rel="preload" href="/1.72c59440.js" as="script">
<link rel="preload" href="/2.a2e0b0a9.js" as="script">
<link rel="preload" href="/3.054f69af.js" as="script">
<link rel="preload" href="/1be78505.da78ff7d.js" as="script">
<link rel="preload" href="/85.0018927c.js" as="script">
<link rel="preload" href="/f976f453.e1be0e0e.js" as="script">
<link rel="preload" href="/17896441.9aece880.js" as="script">
<link rel="preload" href="/d43b3010.30d52cd3.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.png" alt="Fur Logo"><strong class="navbar__title">Fur</strong></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/">Next</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs">文档</a><a class="navbar__item navbar__link" href="/blog">博客</a><a href="https://chinadot.net" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">社区</a></div><div class="navbar__items navbar__items--right"><a href="https://space.bilibili.com/695987967" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">视频</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">工具</a><ul class="dropdown__menu"><li><a target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">代码生成器</a></li></ul></div><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">看板</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">仓库</a><ul class="dropdown__menu"><li><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">Gitee</a></li><li><a href="https://github.com/MonkSoul/Fur" target="_blank" rel="noopener noreferrer" class="dropdown__link" position="left">GitHub</a></li></ul></div><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_2aTZ"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_BsTx">🌜</span></div><div class="react-toggle-track-x"><span class="toggle_BsTx">🌞</span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img class="navbar__logo" src="/img/logo.png" alt="Fur Logo"><strong class="navbar__title">Fur</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link">Versions</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link navbar__link--active" href="/docs">文档</a></li><li class="menu__list-item"><a class="menu__link" href="/blog">博客</a></li><li class="menu__list-item"><a href="https://chinadot.net" target="_blank" rel="noopener noreferrer" class="menu__link">社区</a></li><li class="menu__list-item"><a href="https://space.bilibili.com/695987967" target="_blank" rel="noopener noreferrer" class="menu__link">视频</a></li><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist">工具</a><ul class="menu__list"><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link" position="left">代码生成器</a></li></ul></li><li class="menu__list-item"><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="menu__link">看板</a></li><li class="menu__list-item"><a target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist">仓库</a><ul class="menu__list"><li class="menu__list-item"><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="menu__link" position="left">Gitee</a></li><li class="menu__list-item"><a href="https://github.com/MonkSoul/Fur" target="_blank" rel="noopener noreferrer" class="menu__link" position="left">GitHub</a></li></ul></li></ul></div></div></div></nav><div class="main-wrapper"><div class="docPage_2gpo"><div class="docSidebarContainer_3_JD" role="complementary"><div class="sidebar_2urC"><div class="menu menu--responsive menu_5FrY"><button aria-label="Open Menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg aria-label="Menu" class="sidebarMenuIcon_Dm3K" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 32 32" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">1. 框架介绍</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/">1.1 介绍</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/author">1.2 关于作者</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/source">1.3 源码结构</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/reference">1.4 项目引用</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/get-start">2. 一分钟入门</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/appstartup">3. 应用启动</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">4. 配置与选项</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/configuration">4.1 配置</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/options">4.2 选项</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/dynamic-api-controller">5. 动态 WebAPI</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/specification-document">6. 规范化接口文档</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/friendly-exception">7. 友好异常处理</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/data-validation">8. 数据校验</a></li><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#!">9. 数据库操作指南</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext">9.1 数据库上下文</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-locator">9.2 数据库上下文定位器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/entity">9.3 数据库实体</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" tabindex="0" href="/docs/dbcontext-repository">9.4 仓储模式</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-add">9.5 新增操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-update">9.6 更新操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-add-or-update">9.7 新增或更新操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-delete">9.8 删除操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-batch">9.9 批量操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-query">9.10 查询操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-hight-query">9.11 高级查询操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-view">9.12 视图操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-proc">9.13 存储过程操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-function">9.14 函数操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-sql">9.15 Sql 操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-sql-template">9.16 Sql 模板</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-sql-proxy">9.17 Sql 高级代理</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-multi-database">9.18 多数据库操作</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-db-first">9.19 数据库生成模型</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-code-first">9.20 模型生成数据库</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-seed-data">9.21 实体种子数据</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-audit">9.22 审计日志</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-filter">9.23 实体/全局查询筛选器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-Interceptor">9.24 数据库操作拦截器</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/tran">9.25 事务和工作单元</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dbcontext-read-write">9.26 读写分离/主从复制</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/split-db">9.27 分表分库</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/saas">10. SaaS 多租户</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/dependency-injection">11. 依赖注入/控制反转</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/object-mapper">12. 对象数据映射</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/cache">13. 分布式缓存</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/auth-control">14. 安全鉴权</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/cors">15. CORS 跨域</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/view-engine">16. 视图引擎</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/local-language">17. 多语言处理</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/event-bus">18. 事件总线</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/logging">19. 日志记录</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/http">20. 网络请求</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/process-service">21. 进程服务</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/job">22. 任务调度</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/signalr">23. 即时通讯</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/grpc">24. Grpc 服务</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/deploy">25. 托管部署</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/devops">26. 持续部署集成</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">27. 测试指南</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/unittest">27.1 单元测试</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/performance">27.2 性能测试</a></li></ul></li><li class="menu__list-item"><a class="menu__link" href="/docs/contribute">28. 贡献指南</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">29. 常见问题</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/answer">29.1 常见问题</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/errors">29.2 常见错误</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/gooduse">29.3 最佳实践</a></li></ul></li></ul></div></div></div><main class="docMainContainer_3EyW"><div class="container padding-vert--lg docItemWrapper_1EkI"><div class="row"><div class="col docItemCol_2ASc"><div class="docItemContainer_3QWW"><article><header><h1 class="docTitle_1Lrw">9.4 仓储模式</h1></header><div class="markdown"><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="941-什么是仓储"></a>9.4.1 什么是仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#941-什么是仓储" title="Direct link to heading">#</a></h2><blockquote><p>在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象，实际上，仓储被用于领域对象在数据库上的操作（实体 Entity 和值对象 Value types）。一般来说,我们针对不同的实体(或聚合根 Aggregate Root)会创建相对应的仓储。</p></blockquote><p>简单来说，仓储就是数据存取操作的载体，但不限定于数据库。</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="941-内置仓储"></a>9.4.1 内置仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#941-内置仓储" title="Direct link to heading">#</a></h2><p><code>Fur</code> 框架内置了一个数据库操作的仓储，方便大家拓展和集成：</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9411-非泛型超级仓储"></a>9.4.1.1 非泛型超级仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9411-非泛型超级仓储" title="Direct link to heading">#</a></h3><ul><li><code>IRepository</code>：默认非泛型仓储接口，支持切换到任何仓储</li><li><code>EFCoreRepository</code>：默认非泛型仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9412-泛型实体仓储"></a>9.4.1.2 泛型实体仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9412-泛型实体仓储" title="Direct link to heading">#</a></h3><ul><li><code>IRepository&lt;TEntity&gt;</code>：默认数据库实体仓储接口</li><li><code>EFCoreRepository&lt;TEntity&gt;</code>：默认数据库实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9413-泛型多数据库实体仓储"></a>9.4.1.3 泛型多数据库实体仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9413-泛型多数据库实体仓储" title="Direct link to heading">#</a></h3><ul><li><code>IRepository&lt;TEntity, TDbContextLocator&gt;</code>：任意数据库的实体仓储接口</li><li><code>EFCoreRepository&lt;TEntity, TDbContextLocator&gt;</code>：任意数据库的实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9414-sql-操作仓储"></a>9.4.1.4 <code>Sql</code> 操作仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9414-sql-操作仓储" title="Direct link to heading">#</a></h3><ul><li><code>ISqlRepository</code>：默认数据库 <code>Sql</code> 操作仓储接口</li><li><code>SqlRepository</code>：默认数据库 <code>Sql</code> 操作仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9415-多数据库-sql-操作仓储"></a>9.4.1.5 多数据库 <code>Sql</code> 操作仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9415-多数据库-sql-操作仓储" title="Direct link to heading">#</a></h3><ul><li><code>ISqlRepository&lt;TDbContextLocator&gt;</code>：任意数据库的 <code>Sql</code> 操作仓储接口</li><li><code>SqlRepository&lt;TDbContextLocator&gt;</code>：任意数据库的 <code>Sql</code> 操作仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9416-只读实体仓储（支持多库）"></a>9.4.1.6 只读实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9416-只读实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IReadableRepository&lt;TEntity&gt;</code>：默认数据库只读实体仓储接口</li><li><code>IReadableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只读实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9417-只写实体仓储（支持多库）"></a>9.4.1.7 只写实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9417-只写实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IWritableRepository&lt;TEntity&gt;</code>：默认数据库只写实体仓储接口</li><li><code>IWritableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只写实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9418-只允许新增实体仓储（支持多库）"></a>9.4.1.8 只允许新增实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9418-只允许新增实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IInsertableRepository&lt;TEntity&gt;</code>：默认数据库只允许新增的实体仓储接口</li><li><code>IInsertableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只允许新增的实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9419-只允许更新实体仓储（支持多库）"></a>9.4.1.9 只允许更新实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9419-只允许更新实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IUpdateableRepository&lt;TEntity&gt;</code>：默认数据库只允许更新的实体仓储接口</li><li><code>IUpdateableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只允许更新的实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="94110-只允许删除实体仓储（支持多库）"></a>9.4.1.10 只允许删除实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#94110-只允许删除实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IDeletableRepository&lt;TEntity&gt;</code>：默认数据库只允许删除的实体仓储接口</li><li><code>IDeletableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只允许删除的实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="94111-只允许拓展操作实体仓储（支持多库）"></a>9.4.1.11 只允许拓展操作实体仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#94111-只允许拓展操作实体仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>IOperableRepository&lt;TEntity&gt;</code>：默认数据库只允许拓展操作实体仓储接口</li><li><code>IOperableRepository&lt;TEntity, TDbContextLocator&gt;</code>：多数据库只允许拓展操作实体仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="94112-只允许-sql-查询仓储（支持多库）"></a>9.4.1.12 只允许 <code>Sql</code> 查询仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#94112-只允许-sql-查询仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>ISqlReaderRepository</code>：默认数据库只允许 <code>Sql</code> 查询仓储接口</li><li><code>ISqlReaderRepository&lt;TDbContextLocator&gt;</code>：多数据库只允许 <code>Sql</code> 查询仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="94113-只允许-sql-非查询仓储（支持多库）"></a>9.4.1.13 只允许 <code>Sql</code> 非查询仓储（支持多库）<a aria-hidden="true" tabindex="-1" class="hash-link" href="#94113-只允许-sql-非查询仓储（支持多库）" title="Direct link to heading">#</a></h3><ul><li><code>ISqlExecutableRepository</code>：默认数据库只允许 <code>Sql</code> 非查询仓储接口</li><li><code>ISqlExecutableRepository&lt;TDbContextLocator&gt;</code>：多数据库只允许 <code>Sql</code> 非查询仓储实现</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="94114-读写分离仓储"></a>9.4.1.14 读写分离仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#94114-读写分离仓储" title="Direct link to heading">#</a></h3><ul><li><code>IMSRepository</code>：最多支持 <strong>一主7从</strong> 仓储</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="942-仓储使用"></a>9.4.2 仓储使用<a aria-hidden="true" tabindex="-1" class="hash-link" href="#942-仓储使用" title="Direct link to heading">#</a></h2><p><code>Fur</code> 提供了非常多的方式创建仓储，目的是为了让大家可以在不同的场景中使用。</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9421-构造函数注入"></a>9.4.2.1 构造函数注入<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9421-构造函数注入" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">private readonly IRepository&lt;Person&gt; _personRepository;</span></div><div class="token-line docusaurus-highlight-code-line" style="color:#bfc7d5"><span class="token plain">public FurService(IRepository&lt;Person&gt; personRepository)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">{</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    _personRepository = personRepository;</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span></div></div></div></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9422-方法参数注入"></a>9.4.2.2 方法参数注入<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9422-方法参数注入" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line docusaurus-highlight-code-line" style="color:#bfc7d5"><span class="token plain">public async Task&lt;List&lt;PersonDto&gt;&gt; GetAll([FromServices] IRepository&lt;Person&gt; repository, string keyword)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">{</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    var persons = await repository.AsQueryable().ToListAsync();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    return persons.Adapt&lt;List&lt;PersonDto&gt;&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span></div></div></div></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9423-dbgetrepository-获取"></a>9.4.2.3 <code>Db.GetRepository</code> 获取<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9423-dbgetrepository-获取" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 非泛型仓储</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var repository = Db.GetRepository();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 泛型仓储</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var repository = Db.GetRepository&lt;Person&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// Sql 仓储</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var sqlRepository = Db.GetSqlRepository();</span></div></div></div></div></div><div class="admonition admonition-important alert alert--info"><div class="admonition-heading"><h5><span class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>特别说明</h5></div><div class="admonition-content"><p>不管采用那种方式，<code>Fur</code> 都保证了仓储一次请求唯一性。同时 <code>Db.GetRepository&lt;TEntity&gt;()</code> 方式支持任何静态类中使用。</p></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="943-仓储高级用法"></a>9.4.3 仓储高级用法<a aria-hidden="true" tabindex="-1" class="hash-link" href="#943-仓储高级用法" title="Direct link to heading">#</a></h2><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9431-动态切换实体仓储"></a>9.4.3.1 动态切换实体仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9431-动态切换实体仓储" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">var userRepository = personRepository.Change&lt;User&gt;();</span></div></div></div></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9432-动态切换仓储类型"></a>9.4.3.2 动态切换仓储类型<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9432-动态切换仓储类型" title="Direct link to heading">#</a></h3><p>比如，读写分离/主从库仓储：</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 只读仓储</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var readRepository = personRepository.Constraint&lt;IReadableRepository&lt;User&gt;&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 只写仓储</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var readRepository = personRepository.Constraint&lt;IWritableRepository&lt;User&gt;&gt;();</span></div></div></div></div></div><div class="admonition admonition-tip alert alert--success"><div class="admonition-heading"><h5><span class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>小知识</h5></div><div class="admonition-content"><p><code>.Constraint</code> 支持切换任何仓储类型。</p></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9433-获取-sql-操作仓储"></a>9.4.3.3 获取 <code>Sql</code> 操作仓储<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9433-获取-sql-操作仓储" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">var sqlRepository = repository.Sql();</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="944-多数据库操作"></a>9.4.4 多数据库操作<a aria-hidden="true" tabindex="-1" class="hash-link" href="#944-多数据库操作" title="Direct link to heading">#</a></h2><p><code>Fur</code> 通过 <code>DbContextLocator</code> 数据库上下文定位器实现多种数据库操作，可以随意切换数据库</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="9441-动态切换多个数据库"></a>9.4.4.1 动态切换多个数据库<a aria-hidden="true" tabindex="-1" class="hash-link" href="#9441-动态切换多个数据库" title="Direct link to heading">#</a></h3><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="动态切换数据库"></a>动态切换数据库<a aria-hidden="true" tabindex="-1" class="hash-link" href="#动态切换数据库" title="Direct link to heading">#</a></h4><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 切换到 MSSQL 操作 Person表</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var mssqlRepository = repository.Change&lt;Person, MsSqlDbContextLocator&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 切换到 MySql 操作 Person表</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var mysqlRepository = repository.Change&lt;Person, MySqlDbContextLocator&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 切换到 Sqlite 操作 Person表</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">var sqliteRepository = repository.Change&lt;Person, SqliteDbContextLocator&gt;();</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">// 其他更多数据库一样的操作</span></div></div></div></div></div><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="另外任何仓储或实体配置都支持多个数据库同时操作"></a>另外任何仓储或实体配置都支持多个数据库同时操作<a aria-hidden="true" tabindex="-1" class="hash-link" href="#另外任何仓储或实体配置都支持多个数据库同时操作" title="Direct link to heading">#</a></h4><p>仓储方式</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">IRepository&lt;Person, MsSqlDbContextLocator&gt; mssqlRepository</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ISqlRepository&lt;MsSqlDbContextLocator&gt; mssqlRepository;</span></div></div></div></div></div><p>动态 <code>sql</code> 方式</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">&quot;select * from person&quot;.Change&lt;MsSqlDbContextLocator&gt;().SqlQuery();</span></div></div></div></div></div><p>实体配置方式</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">public class User:Entity&lt;MsSqlDbContextLocator, MySqlDbContextLocator&gt;</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">{</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span></div></div></div></div></div><p><code>Sql</code> 代理方式</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">[SqlFunction(&quot;funcName&quot;, DbContextLocator = typeof(MySqlDbContextLocator))]</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">int GetAge(int id);</span></div></div></div></div></div><p><code>Linq</code> 中方式</p><div class="mdxCodeBlock_1XEh"><div class="codeBlockContent_1u-d"><button type="button" aria-label="Copy code to clipboard" class="copyButton_10dd">Copy</button><div tabindex="0" class="prism-code language-cs codeBlock_3iAC"><div class="codeBlockLines_b7E3" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">[QueryableFunction(&quot;funcName&quot;,&quot;dbo&quot;, DbContextLocator = typeof(MySqlDbContextLocator))]</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">string GetName()=&gt; throw Oops.Oh(&quot;不支持该数据库操作&quot;);</span></div></div></div></div></div><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_2cZh" id="945-反馈与建议"></a>9.4.5 反馈与建议<a aria-hidden="true" tabindex="-1" class="hash-link" href="#945-反馈与建议" title="Direct link to heading">#</a></h2><div class="admonition admonition-note alert alert--secondary"><div class="admonition-heading"><h5><span class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>与我们交流</h5></div><div class="admonition-content"><p>给 Fur 提 <a href="https://gitee.com/monksoul/Fur/issues/new?issue" target="_blank" rel="noopener noreferrer">Issue</a>。</p></div></div></div></article><div class="margin-vert--xl"><div class="row"><div class="col"><a href="https://gitee.com/monksoul/Fur/tree/main/handbook/docs/dbcontext-repository.mdx" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="1.2em" width="1.2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 40 40" style="margin-right:0.3em;vertical-align:sub"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div></div></div><div class="margin-vert--lg"><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/entity"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">« 9.3 数据库实体</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/dbcontext-add"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">9.5 新增操作 »</div></a></div></nav></div></div></div><div class="col col--3"><div class="tableOfContents_3SO_"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#941-什么是仓储" class="table-of-contents__link">9.4.1 什么是仓储</a></li><li><a href="#941-内置仓储" class="table-of-contents__link">9.4.1 内置仓储</a><ul><li><a href="#9411-非泛型超级仓储" class="table-of-contents__link">9.4.1.1 非泛型超级仓储</a></li><li><a href="#9412-泛型实体仓储" class="table-of-contents__link">9.4.1.2 泛型实体仓储</a></li><li><a href="#9413-泛型多数据库实体仓储" class="table-of-contents__link">9.4.1.3 泛型多数据库实体仓储</a></li><li><a href="#9414-sql-操作仓储" class="table-of-contents__link">9.4.1.4 <code>Sql</code> 操作仓储</a></li><li><a href="#9415-多数据库-sql-操作仓储" class="table-of-contents__link">9.4.1.5 多数据库 <code>Sql</code> 操作仓储</a></li><li><a href="#9416-只读实体仓储（支持多库）" class="table-of-contents__link">9.4.1.6 只读实体仓储（支持多库）</a></li><li><a href="#9417-只写实体仓储（支持多库）" class="table-of-contents__link">9.4.1.7 只写实体仓储（支持多库）</a></li><li><a href="#9418-只允许新增实体仓储（支持多库）" class="table-of-contents__link">9.4.1.8 只允许新增实体仓储（支持多库）</a></li><li><a href="#9419-只允许更新实体仓储（支持多库）" class="table-of-contents__link">9.4.1.9 只允许更新实体仓储（支持多库）</a></li><li><a href="#94110-只允许删除实体仓储（支持多库）" class="table-of-contents__link">9.4.1.10 只允许删除实体仓储（支持多库）</a></li><li><a href="#94111-只允许拓展操作实体仓储（支持多库）" class="table-of-contents__link">9.4.1.11 只允许拓展操作实体仓储（支持多库）</a></li><li><a href="#94112-只允许-sql-查询仓储（支持多库）" class="table-of-contents__link">9.4.1.12 只允许 <code>Sql</code> 查询仓储（支持多库）</a></li><li><a href="#94113-只允许-sql-非查询仓储（支持多库）" class="table-of-contents__link">9.4.1.13 只允许 <code>Sql</code> 非查询仓储（支持多库）</a></li><li><a href="#94114-读写分离仓储" class="table-of-contents__link">9.4.1.14 读写分离仓储</a></li></ul></li><li><a href="#942-仓储使用" class="table-of-contents__link">9.4.2 仓储使用</a><ul><li><a href="#9421-构造函数注入" class="table-of-contents__link">9.4.2.1 构造函数注入</a></li><li><a href="#9422-方法参数注入" class="table-of-contents__link">9.4.2.2 方法参数注入</a></li><li><a href="#9423-dbgetrepository-获取" class="table-of-contents__link">9.4.2.3 <code>Db.GetRepository</code> 获取</a></li></ul></li><li><a href="#943-仓储高级用法" class="table-of-contents__link">9.4.3 仓储高级用法</a><ul><li><a href="#9431-动态切换实体仓储" class="table-of-contents__link">9.4.3.1 动态切换实体仓储</a></li><li><a href="#9432-动态切换仓储类型" class="table-of-contents__link">9.4.3.2 动态切换仓储类型</a></li><li><a href="#9433-获取-sql-操作仓储" class="table-of-contents__link">9.4.3.3 获取 <code>Sql</code> 操作仓储</a></li></ul></li><li><a href="#944-多数据库操作" class="table-of-contents__link">9.4.4 多数据库操作</a><ul><li><a href="#9441-动态切换多个数据库" class="table-of-contents__link">9.4.4.1 动态切换多个数据库</a></li></ul></li><li><a href="#945-反馈与建议" class="table-of-contents__link">9.4.5 反馈与建议</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">文档</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/get-start">入门</a></li><li class="footer__item"><a class="footer__link-item" href="/docs">指南</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">社区</h4><ul class="footer__items"><li class="footer__item"><a href="https://gitee.com/monksoul/Fur/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">讨论</a></li><li class="footer__item"><a href="https://gitee.com/monksoul/Fur/board" target="_blank" rel="noopener noreferrer" class="footer__link-item">看板</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">更多</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/blog">博客</a></li><li class="footer__item"><a href="https://gitee.com/monksoul/Fur" target="_blank" rel="noopener noreferrer" class="footer__link-item">仓库</a></li></ul></div></div><div class="text--center"><div>Copyright © 2020 Fur, Baiqian Co.,Ltd.</div></div></div></footer></div>
<script src="/styles.8352e18a.js"></script>
<script src="/runtime~main.98e14d7d.js"></script>
<script src="/main.04e1b7d6.js"></script>
<script src="/1.72c59440.js"></script>
<script src="/2.a2e0b0a9.js"></script>
<script src="/3.054f69af.js"></script>
<script src="/1be78505.da78ff7d.js"></script>
<script src="/85.0018927c.js"></script>
<script src="/f976f453.e1be0e0e.js"></script>
<script src="/17896441.9aece880.js"></script>
<script src="/d43b3010.30d52cd3.js"></script>
</body>
</html>